package br.com.pucrs.tcc.controller;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.pucrs.tcc.ed.Evento;
import br.com.pucrs.tcc.ed.GrupoTrabalho;
import br.com.pucrs.tcc.enumerator.TipoUsuarioEnum;
import br.com.pucrs.tcc.exception.EventoException;
import br.com.pucrs.tcc.rn.EventoRN;
import br.com.pucrs.tcc.rn.GrupoTrabalhoRN;
import br.com.pucrs.tcc.util.jsf.MensagemUtil;
import br.com.pucrs.tcc.util.jsf.PaginaUtil;
import br.com.pucrs.tcc.util.jsf.ParametroPagina;
import br.com.pucrs.tcc.util.jsf.SessionUtil;

@ManagedBean(name = "EventoBean")
@ViewScoped
public class EventoBean {

	private String id;

	@EJB
	private GrupoTrabalhoRN mGrupoRN;

	@EJB
	private EventoRN mEventoRN;

	private Evento evento;

	private List<GrupoTrabalho> grupos;

	private Integer grupoID;

	private boolean privado;

	public EventoBean() {

	}

	public void init() {
		if (!FacesContext.getCurrentInstance().isPostback()) {

			if (TipoUsuarioEnum.PROFESSOR.equals(SessionUtil.getTipoUsuarioLogado())) {
				grupos = mGrupoRN.listaPorProfessor(SessionUtil.getMatriculaUsuarioLogado());
				privado = true;
			} else {
				grupos = new ArrayList<GrupoTrabalho>();
				privado = false;
			}

			if (id != null) {
				evento = mEventoRN.obter(Integer.parseInt(id));
				if (evento.getGrupoTrabalho() != null) {
					grupoID = evento.getGrupoTrabalho().getId();
				}
			} else {
				evento = new Evento();
				evento.setQtdAlertas(0);
			}
		}
	}

	public void doListar() {
		try {

			ArrayList<ParametroPagina> parametros = new ArrayList<ParametroPagina>();

			PaginaUtil.redirecionar("/pages/evento_lista.xhtml", parametros);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void doSalvar() {

		if (grupoID != null) {
			GrupoTrabalho g = new GrupoTrabalho();
			g.setId(grupoID);
			evento.setGrupoTrabalho(g);
		}

		try {
			Evento eventoRet = mEventoRN.salva(evento);
			if (eventoRet != null) {
				evento = eventoRet;
				MensagemUtil.mostraMensagemSucesso("Evento salvo com sucesso.");
			}
		} catch (EventoException e) {
			MensagemUtil.mostraMensagemErro(e.getMessage());
		} catch (Exception e) {
			MensagemUtil.mostraMensagemFatal(e.getMessage());
		}

	}
	
	public void doNovo() {
		try {

			ArrayList<ParametroPagina> parametros = new ArrayList<ParametroPagina>();

			PaginaUtil.redirecionar("/pages/evento_novo.xhtml", parametros);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Evento getEvento() {
		return evento;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public List<GrupoTrabalho> getGrupos() {
		return grupos;
	}

	public void setGrupos(List<GrupoTrabalho> grupos) {
		this.grupos = grupos;
	}

	public boolean isPrivado() {
		return privado;
	}

	public void setPrivado(boolean privado) {
		this.privado = privado;
	}

	public Integer getGrupoID() {
		return grupoID;
	}

	public void setGrupoID(Integer grupoID) {
		this.grupoID = grupoID;
	}

}
